#include <iostream>
#include <future>
#include <thread>
#include <chrono>
void Add(int num1, int num2, std::promise<int>& prom)
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    prom.set_value(num1 + num2);
}
int main()
{
    std::promise<int> prom;
    std::future<int> fu = prom.get_future(); //建立关联关系
    std::thread thread1(Add, 1, 2, std::ref(prom)); //这里必须要ref，按引用传值
                                                    //线程传递参数的默认行为是拷贝，也就是说无法直接通过线程拿到返回值
    std::cout << fu.get() << std::endl; //和普通的传值不一样，这里get会阻塞住，普通的int传值不能不能知道结果是否处理好
    thread1.join();
    return 0;
}